﻿/**	std_v2t.hpp
 *	----	Create Time Stamp	--2007-08-02 21:10:42--
 *------------------------------------------------------------------------------
 *	Mean	:
 *	Author	:Nick Shallery	(nicknide@gmail.com)
 *	Version	:1.0.1.1	(2007-08-02 21:10:42)
 *------------------------------------------------------------------------------
**/	/*YOU HAVE ALL LEFT WITH THIS CODE WHILE YOU KEEP COMMENT IN EVERY COPY.*/


#if			!defined(__LOLIX__TOY__STD_V2T__NICK__K_IN_G__)
#define		__LOLIX__TOY__STD_V2T__NICK__K_IN_G__
//==============================================================================
//--------------------------------------------------------------------------

#if			defined(__cplusplus)

#if			!defined(__LOLIX__LOLI_X_CFG__K_IN_G__)
	#include	"../lolix_cfg.h"
#endif	//	!defined(__LOLIX__LOLI_X_CFG__K_IN_G__)

#if			LOLIX_CFG__PER_CHECK_FILE_CHUNK_SPACE
	#if			!defined(__LOLIX__LOLIX_TYPE__K_IN_G__)
		#include	"../lolix_type.h"
	#endif	//	!defined(__LOLIX__LOLIX_TYPE__K_IN_G__)
#else	//	LOLIX_CFG__PER_CHECK_FILE_CHUNK_SPACE
	#include	"../lolix_type.h"
#endif	//	LOLIX_CFG__PER_CHECK_FILE_CHUNK_SPACE


namespace lolix{namespace toy{
	namespace _help{
		class _v2t_base_memory
		{
			typedef	_v2t_base_memory	this_type;
		public:
			typedef	size_type			size_type;
			typedef	ptrdiff_t			difference_type;
		};
	}

	template<typename _Ty>
	class v2t_trait
		: public _help::_v2t_base_memory
	{
		typedef	_help::_v2t_base_memory		base_type;
	public:
		typedef _Ty							value_type;

		typedef const value_type&			const_reference;
		typedef const value_type*			const_pointer;

		typedef value_type&					reference;
		typedef value_type*					pointer;

		typedef	base_type::difference_type	difference_type;
		typedef	base_type::size_type		size_type;
	};

	template<typename _Ty>
	class v2t_trait<const _Ty>
		: protected _help::_v2t_base_memory
	{
	typedef	_help::_v2t_base_memory			base_type;
	public:
		typedef	base_type::difference_type	difference_type;
		typedef	base_type::size_type		size_type;

		typedef	const _Ty					value_type;

		typedef	value_type&					const_reference;
		typedef	value_type&					reference;
		typedef	value_type*					const_pointer;
		typedef	value_type*					pointer;
	};

	template<>
	class v2t_trait<void>
		:  protected _help::_v2t_base_memory
	{
		typedef	_help::_v2t_base_memory		base_type;
	public:
		typedef	base_type::difference_type	difference_type;
		typedef	base_type::size_type		size_type;

		typedef	void						value_type;

		typedef	const value_type*			const_pointer;
		typedef	const void					const_reference;
		typedef	value_type*					pointer;
		typedef	void						reference;
	};
}}

#endif	//	defined(__cplusplus)

//--------------------------------------------------------------------------
//==============================================================================
#endif	//	!defined(__LOLIX__TOY__STD_V2T__NICK__K_IN_G__)
